import env from "./env.js"
let http = env.BASE_API
// 封装常用的fun方法
import Vue from 'vue'; //引入vue
//必须实例化 Vue
let vm = new Vue();
export default {
	// 用户登录   code == 1  的时候自动帮用户登录程序，使用过程序用户首次进入也执行一次默认登录的操作
	log_back(ishide = true) {
		return new Promise((resolve, reject) => {
			uni.login({
				success: (res) => {
					if (res.code) {
						let data = {
							UserNumber: uni.getStorageSync('UserNumber'), //账号
							Password: uni.getStorageSync('password'), //密码
							// APPAddress: uni.getStorageSync('APPAddress'),				//设备码
							code: res.code //用户code
						}
						vm.$store.dispatch('login', data).then(res => {
							if (ishide) {
								if (res.code == 200) {
									uni.reLaunch({
										url: "../content/content"
									})
								}
							}
						})
					}
				}
			})
		})
	},
	// 消息弹框提醒
	showToast(text, type, time = 3000) {
		uni.showToast({
			title: text,
			icon: type ? 'success' : "none",
			duration: time
		})
	},
	// 获取用户设备码
	nowTime() { //获取当前时间
		let now = new Date();
		let _month = (10 > (now.getMonth() + 1)) ? '0' + (now.getMonth() + 1) : now.getMonth() + 1;
		let _day = (10 > now.getDate()) ? '0' + now.getDate() : now.getDate();
		let _hour = (10 > now.getHours()) ? '0' + now.getHours() : now.getHours();
		let _minute = (10 > now.getMinutes()) ? '0' + now.getMinutes() : now.getMinutes();
		let _second = (10 > now.getSeconds()) ? '0' + now.getSeconds() : now.getSeconds();
		var _ms = now.getMilliseconds();
		return now.getFullYear() + '' + _month + '' + _day + '' + _hour + '' + _minute + '' + _second + '' + _ms;
	},

	// 递归pack选择器多级联动
	// 两个参数  e 是pack数组返回值      len是数组长度
	pack_linkage(e, len) {
		let leng = len
		if (e[leng].label == null) {
			let jian = leng - 1
			return this.pack_linkage(e, jian)
		}
		return e[leng]
	},
	pack_linkage(e, len) {
		let leng = len
		if (e[leng].label == null) {
			let jian = leng - 1
			return this.pack_linkage(e, jian)
		}
		return e[leng]
	},
	// 去重数组对象   arr是数组   key是根据那个字段去重
	deduplication(arr, key) {
		let obj = {};
		arr = arr.reduce(function(item, next) {
			//next的数值分别是：arr[0], arr[1] ...。 
			//去掉最后的参数[]以后， next的数据为 arr[1], arr[2]...。
			obj[next[key]] ? '' : obj[next[key]] = true && item.push(next);
			return item;
		}, []);
		return arr; //去重后返回的数组
	},
	// 设置返回上一页方法
	return_last(time = 0) {
		setTimeout(function() {
			uni.navigateBack()
		}, time)
	},
	// 获取搜索
	seach(_data, _key, _cb, _title) {
		var calldata = [];
		if (_data && _data.length > 0) {
			_data.forEach(t => {
				var obj = JSON.parse(JSON.stringify(t));
				if (!obj[_title || 'name'].includes(_key)) {
					this.seach(t.children || [], _key, function(_b) {
						obj.children = _b;
					})
					if (obj.children && obj.children.length > 0) {
						calldata.push(obj);
					}
				} else {
					calldata.push(obj);
				}
			})
		}
		_cb(calldata);
	},


	// 自动上传图片识别文字
	scan_code(url) {
		return new Promise((resolve, rejeck) => {
			uni.chooseImage({
				count: 1,
				sizeType: ['original', 'compressed'],
				sourceType: ['album', 'camera'],
				success: (res) => {
					const tempFilePaths = res.tempFilePaths
					uni.uploadFile({
						url: http + url, //仅为示例，非真实的接口地址
						filePath: tempFilePaths[0],
						name: 'file',
						formData: {
							'user': 'test'
						},
						header: {
							token: uni.getStorageSync('token'),
							userid: uni.getStorageSync('staffId')
						},
						success: (res) => {
							if (res.statusCode == 200) {
								let data = {
									name: "", //姓名
									site: '', //地址
									position: "", //职位
									phone: '', //手机
									company: '', //公司
								}
								let j = JSON.parse(res.data)
								let b = JSON.parse(j.data)
								for (let i in b.BusinessCardInfos) {
									if (b.BusinessCardInfos[i].Name == "姓名") {
										data.name = b.BusinessCardInfos[i].Value
									}
									if (b.BusinessCardInfos[i].Name == "地址") {
										data.site = b.BusinessCardInfos[i].Value
									}
									if (b.BusinessCardInfos[i].Name == "职位") {
										data.position = b.BusinessCardInfos[i].Value
									}
									if (b.BusinessCardInfos[i].Name == "手机") {
										data.phone = b.BusinessCardInfos[i].Value
									}
									if (b.BusinessCardInfos[i].Name == "公司") {
										data.company = b.BusinessCardInfos[i].Value
									}
								}
								resolve(data)
							}
							// console.log(res,"名片信息")
							// const data = res.data
							//do something
						},
						fail: (err) => {
							showToast(err.errMsg)
						}
					})
				}
			})
		})
	},


	// 小程序更新版本
	autoUpdate() {
		var self = this
		// 获取小程序更新机制兼容
		if (uni.canIUse('getUpdateManager')) {
			const updateManager = uni.getUpdateManager()
			//1. 检查小程序是否有新版本发布
			updateManager.onCheckForUpdate(function(res) {
				// 请求完新版本信息的回调
				if (res.hasUpdate) {
					//检测到新版本，需要更新，给出提示
					uni.showModal({
						title: '更新提示',
						content: '检测到新版本，是否下载新版本并重启小程序？',
						success: function(res) {
							if (res.confirm) {
								//2. 用户确定下载更新小程序，小程序下载及更新静默进行
								self.downLoadAndUpdate(updateManager)
							} else if (res.cancel) {
								//用户点击取消按钮的处理，如果需要强制更新，则给出二次弹窗，如果不需要，则这里的代码都可以删掉了
								uni.showModal({
									title: '温馨提示~',
									content: '本次版本更新涉及到新的功能添加，旧版本无法正常访问的哦~',
									showCancel: false, //隐藏取消按钮
									confirmText: "确定更新", //只保留确定更新按钮
									success: function(res) {
										if (res.confirm) {
											//下载新版本，并重新应用
											self.downLoadAndUpdate(updateManager)
										}
									}
								})
							}
						}
					})
				}
			})
		} else {
			// 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
			uni.showModal({
				title: '提示',
				content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
			})
		}
	},
	/**
	 * 下载小程序新版本并重启应用
	 */
	downLoadAndUpdate(updateManager) {
		var self = this
		uni.showLoading();
		//静默下载更新小程序新版本
		updateManager.onUpdateReady(function() {
			uni.hideLoading()
			//新的版本已经下载好，调用 applyUpdate 应用新版本并重启
			updateManager.applyUpdate()
		})
		updateManager.onUpdateFailed(function() {
			// 新的版本下载失败
			// uni.showModal({
			//   title: '已经有新版本了哟~',
			//   content: '新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~',
			// })
			uni.showModal({
				title: '更新失败~',
				content: '请重新启动小程序尝试更新！',
			})
		})
	},
	/**
	 * @param {Array} oldArr [{[{}]},...] 多维数组
	 * @param {String|Array} filter  'name' or ['name','date'] 检索字段名称
	 * @param {String} val '' 关键字
	 * @param {String} children  下级字段
	 * @returns array
	 */
	searchArray(oldArr, filter, val, children= "children") {
		const newArr = [];
		if (Array.isArray(filter)|| typeof filter === "string") {
			// if (Array.isArray(filter)|| typeof filter === "string") {
			// typeof filter === "string" ? (filter = [filter]) : "";
			typeof filter === "string"? (filter = [filter]) : "";
			oldArr.map((item) => {
				filter.map((search) => {
					if (item[search].toUpperCase().indexOf(val.toUpperCase()) > -1) {
						if (newArr.indexOf(item) == -1) {
							newArr.push(item);
						}
					} else {
						if (item[children] && item[children].length > 0) {
							const childrenData = searchArray(
								item[children],
								filter,
								val,
								children
							)
							const obj = {
								...item,
								[children]: childrenData
							}
							if (childrenData && childrenData.length > 0) {
								newArr.push(obj)
							}
						}
					}
				});
			});
		} else {
			console.error("必须是数组或字符串");
		}
		return newArr;
	}


}